/*
Automatic clinic tests using a robot arm.
Copyright (C) 2010  CIC-CPC, CHU Gabriel Montpied
All other trademarks, logos and copyrights are the property
of their respective owners.

This file is part of cpc-painbot.

cpc-painbot is free software: you can redistribute it and/or modify
it under the terms of the GNU Lesser General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.

cpc-painbot is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU Lesser General Public License for more details.

You should have received a copy of the GNU Lesser General Public License
along with cpc-painbot.  If not, see <http://www.gnu.org/licenses/>.
*/

#ifndef CPC_PAINBOT_FILAMENT_H
#define CPC_PAINBOT_FILAMENT_H

#include <QObject>
#include <QDebug>

#include "positionbras.h"
#include "stimulation/outil.h"

/*! Un filament de Von Frey.
    Lors de la stimulation Von Frey, un filament est pris sur le rack, puis utilisé sur le patient.
*/
class Filament : public Outil
{
Q_OBJECT

//! Masse du filament, en gramme.
Q_PROPERTY(qreal masse READ masse WRITE setMasse)

//! Diamètre du filament, en mm.
Q_PROPERTY(qreal diametre READ diametre WRITE setDiametre)

//! Position du filament sur le Rack.
Q_PROPERTY(PositionBras position READ position WRITE setPosition)
public:

    /*! Chargement à partir d'un noeud XML. */
    static Filament *charger(QXmlStreamReader *xml, QObject *parent = 0);

    //! Constructeur.
    explicit Filament(QObject *parent = 0);

    /*! Construit un filament.
        \param[in] masse Masse du filament.
        \param[in] diametre Diamètre du filament.
    */
    Filament(qreal masse, qreal diametre, QObject *parent = 0);

    /*! Valeur du Filament.
        Cette valeur s'exprime en Newton. Elle est calculée à partir de la masse (et du diamètre ?)
        \return la valeur du Filament - en Newton.
    */
    qreal valeur() const { return masse_ * 0.00981; }

    /*! Masse du filament, en gramme.
        \return la masse.
    */
    qreal masse() const { return masse_; }

    /*! Diamètre du filament.
        \return le diamètre du filament.
    */
    qreal diametre() const { return diametre_; }

    /*! Emplacement du filament.
        \return L'emplacement du filament.
    */
    PositionBras position() const { return position_; }



signals:

public slots:
    /*! Change la masse.
        \param[in] masse Nouvelle masse.
    */
    void setMasse(qreal masse) { masse_ = masse; }

    /*! Change le diamètre.
        \param[in] diametre Nouveau diamètre.
    */
    void setDiametre(qreal diametre) { diametre_ = diametre; }

    /*! Change l'emplacement.
        \param[in] position Le nouvel emplacement.
    */
    void setPosition(const PositionBras &position) { position_ = position; }

protected:
    qreal masse_;           //!< Masse du filament, en gramme.
    qreal diametre_;        //!< Diamètre du filament.
    PositionBras position_; //!< Emplacement.
};

QDebug operator <<(QDebug dbg, const Filament &filament);
#endif // CPC_PAINBOT_FILAMENT_H
